package fr.alma.observation;

import java.util.ArrayList;

import fr.alma.interfacesPlugins.PluginSortie;

/**
 * Clase permettant de gerer des plugins de sortie comme des observateurs.
 * @author AUBERT Sebastien
 * @author BOUVET Frederic
 * @author BRAUD Jeremy
 * @author KROMMENHOEK Cedric
 *
 */
public class Observer {

	/**
	 * La liste des plugins de sortie.
	 */
	private ArrayList<PluginSortie> observateurs;
	
	/**
	 * Constructeur.
	 */
	public Observer() {
		this.observateurs = new ArrayList<PluginSortie>();
	}

	/**
	 * Ajoute un plugin de sortie.
	 * @param observateur le plugin de sortie
	 */
	public void ajoutObservateur(Observateur observateur) {
		this.observateurs.add((PluginSortie) observateur);
	}

	/**
	 * Met a jour les plugins de sortie.
	 * @param objet l'information a envoyer
	 */
	public void updateObservateurs(Object objet) {
		for (PluginSortie observateur : this.observateurs) {
			observateur.update(objet);
		}
	}
	
	/**
	 * Demarre les observateurs.
	 */
	public void start() {
		for (PluginSortie observateur : this.observateurs) {
			observateur.start();
		}
	}
	
	/**
	 * Arrete les observateurs.
	 */
	public void stop() {
		for (PluginSortie observateur : this.observateurs) {
			observateur.stop();
		}
	}
	
	/**
	 * Methode renvoyant le nombre d'observateurs.
	 * @return le nombre d'observateurs.
	 */
	public int nombreObservateurs() {
		return this.observateurs.size();
	}
	

}
